package com.api.sign.util;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Date;
import java.util.UUID;

/**
 * @author liuxiaoding
 * @Date 2020/4/1
 **/
public class TestOssUpload {
    public static void main(String[] args) {
        // Endpoint以杭州为例，其它Region请按实际情况填写。
        String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
        // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = "LTAI4FcsypnExdM7Ep9CMvGg";
        String accessKeySecret = "GPwED79pjRhrSCSm2QpDlJFoLnlwBc";
        String bucketName = "tkzc-img";
        // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径，例如abc/efg/123.jpg。
        String objectName = "test/"+ UUID.randomUUID().toString()+".jpg";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 上传内容到指定的存储空间（bucketName）并保存为指定的文件名称（objectName）。
        File file=new File("/Users/bjhl/Desktop/2345.png");

        ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(fileToBetyArray(file)));

        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 180);
        URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
        System.out.println("生成的链接为:"+url);
        // 关闭OSSClient。
        ossClient.shutdown();
    }

    public static byte[] fileToBetyArray(File file)
    {
        FileInputStream fileInputStream = null;
        byte[] bFile = null;
        try {
            bFile = new byte[(int) file.length()];
            fileInputStream = new FileInputStream(file);
            fileInputStream.read(bFile);
            fileInputStream.close();
            for (int i = 0; i < bFile.length; i++) {
                System.out.print((char) bFile[i]);
            }
            System.out.println("Done");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fileInputStream.close();
                bFile.clone();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return bFile;
    }
}
